﻿//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Linq;
//using System.Text;
//using System.Xml.Serialization;

//using Microsoft.VisualStudio.TestTools.UnitTesting;

//using Pibby.Core.Persistence;

//namespace Pibby.Core.Tests
//{
//    //public class CachableIdentifier : Identifiable
//    //{
//    //    public CachableIdentifier()
//    //        : base()
//    //    {
//    //    }

//    //}

//    [TestClass]
//    public class IdentifiableValueCacheTests : IntegrationBaseTestFixture 
//    {
//        [TestMethod]
//        public void CanSerializeAndDeserializeEmptyCache()
//        {
//            IdentifiableValueCache<string> cache = new IdentifiableValueCache<string>();

//            string xmlOutput = string.Empty;

//            using (StringWriter writer = new StringWriter ())
//            {
//                XmlSerializer xml = new XmlSerializer(typeof(IdentifiableValueCache<string>));
//                xml.Serialize(writer, cache);

//                xmlOutput = writer.ToString();
//            }

//            Assert.IsNotEmpty(xmlOutput, "No Serialized data produced");

//            using (StringReader reader = new StringReader(xmlOutput))
//            {
//                XmlSerializer xml = new XmlSerializer(typeof(IdentifiableValueCache<string>));

//                IdentifiableValueCache<string> rebuilt = (IdentifiableValueCache<string>)xml.Deserialize(reader);

//                Assert.AreEqual(0, rebuilt.Count);
//            }
//        }

//        [TestMethod]
//        public void CanSerializeAndDeserializeWorkingCache()
//        {
//            IdentifiableValueCache<string> cache = new IdentifiableValueCache<string>();

//            for (int i = 0; i < 10; ++i)
//            {
//                TaggableThing obj = new TaggableThing();

//                string where = string.Format("c:\\obj{0}.xml", i + 1);

//                cache.Store(obj, where);
//            }

//            string xmlOutput = string.Empty;

//            using (StringWriter writer = new StringWriter())
//            {
//                XmlSerializer xml = new XmlSerializer(typeof(IdentifiableValueCache<string>));
//                xml.Serialize(writer, cache);

//                xmlOutput = writer.ToString();
//            }

//            Assert.IsNotEmpty(xmlOutput, "No Serialized data produced");

//            using (StringReader reader = new StringReader(xmlOutput))
//            {
//                XmlSerializer xml = new XmlSerializer(typeof(IdentifiableValueCache<string>));

//                IdentifiableValueCache<string> rebuilt = (IdentifiableValueCache<string>)xml.Deserialize(reader);

//                Assert.AreEqual(cache.Count, rebuilt.Count);

//                foreach (string ident in rebuilt.Keys)
//                {
//                    Assert.IsTrue(cache.Contains(ident));
//                }
//            }

//        }

//        [TestMethod]
//        public void CanFindExistingItem()
//        {
//            IdentifiableValueCache<string> cache = new IdentifiableValueCache<string>();

//            TaggableThing obj1 = new TaggableThing();

//            string where = "c:\\obj1.xml";

//            cache.Store(obj1, where);

//            Assert.IsTrue(cache.Contains (obj1));
//        }

//        [TestMethod]
//        public void CanRetrieveStoredPaths()
//        {
//            IdentifiableValueCache<string> cache = new IdentifiableValueCache<string>();

//            for (int i = 0; i < 100; ++i)
//            {
//                TaggableThing obj = new TaggableThing();

//                string where = string.Format("c:\\obj{0}.xml", i + 1);

//                Assert.AreEqual(i, cache.Count);
//                cache.Store(obj, where);
//                Assert.AreEqual(i + 1, cache.Count);

//                //Assert.AreEqual(where, cache.PathTo(obj));
//            }
//        }
//    }
//}

